/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package edu.ucue.ptc.gco.dao;

import edu.ucue.ptc.gco.mdl.Empleado;
import edu.ucue.ptc.gco.mdl.ObjetivoEmpleado;
import java.util.List;
import javax.ejb.Stateless;
import javax.inject.Named;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;

/**
 *
 * @author Johnny
 */
@Stateless
@Named(value="objetivoEmpleadoDao")

public class ObjetivoEmpleadoDAO implements ObjetivoEmpleadoDAOLocal {
    @PersistenceContext(unitName="edu.ucue.gped_gestionpedidosee-ejb_ejb_1.0-SNAPSHOTPU")
    private EntityManager entityManager;

    @Override
    public void crearObjetivoEmpleado(ObjetivoEmpleado objetivoempleado) {
        
        entityManager.persist(objetivoempleado);
    }

    @Override
    public void modificarObjetivoEmpleado(ObjetivoEmpleado objetivoempleado) {
        entityManager.merge(objetivoempleado);
    }

    @Override
    public List<ObjetivoEmpleado> listarObjetivoEmpleado(Empleado empleado) {
        Query query = entityManager.createQuery("select c from ObjetivoEmpleado c " + "where c.empleado.idPersona = :pidPersona");
        query.setParameter("pidPersona", empleado.getIdPersona());
        List<ObjetivoEmpleado> listaobjetivos = query.getResultList();
        for(int i=0;i<listaobjetivos.size();i++)
        {
            double montoActual=verificarObjetivoEmpleado(listaobjetivos.get(i));
            listaobjetivos.get(i).setMontoActual(montoActual);
            if(montoActual>=listaobjetivos.get(i).getMonto())
            {
                
                listaobjetivos.get(i).setEstado("Cumplido");
            }else
            {
                listaobjetivos.get(i).setEstado("No Cumplido");
            }
        }
        return listaobjetivos;
    }

    // Add business logic below. (Right-click in editor and choose
    // "Insert Code > Add Business Method")

    @Override
    public void eliminarObjetivoEmpleado(ObjetivoEmpleado objetivoEmpleado) {
        entityManager.remove(entityManager.merge(objetivoEmpleado));
    }

    @Override
    public void eliminarObjetivoEmpleadoPorId(int id) {
        Query query = entityManager.createQuery("select c from ObjetivoEmpleado c "
                + "where c.idObjetivo = :pidObjetivo");
        query.setParameter("pidObjetivo", id);
        ObjetivoEmpleado objetivoEmpleado = (ObjetivoEmpleado)query.getSingleResult();
        entityManager.remove(id);
        
        
    }
    @Override
    public double verificarObjetivoEmpleado(ObjetivoEmpleado obj)
    {
        String q="select sum(total) from pedido inner join (select idPedido from visita where idPedido is not null and idEmpleado= "+obj.getEmpleado().getIdPersona()+" and fechavisita between '"+(obj.getFechaInicio().getYear()+1900)+"-"+(obj.getFechaInicio().getMonth()+1)+"-"+obj.getFechaInicio().getDate()+"' and '"+(obj.getFechaFinal().getYear()+1900)+"-"+(obj.getFechaFinal().getMonth()+1)+"-"+obj.getFechaFinal().getDate()+"') as X using(idPedido);";
        Query query=entityManager.createNativeQuery(q);
        List<Object> listaResulado=query.getResultList();
        try{
            double res=Double.parseDouble(listaResulado.get(0).toString());
            return res;
        }catch(Exception ex){
            return 0;
        }
    }

}
